package com.ssyan;

/**
 * @author ssyan
 * @Description 类加载器的类型分类和关系
 * @create 2021/8/16 0:40
 * @Version 1.0
 */
public class ClassLoaderTest {

    public static void main(String[] args) {

        //获取系统类加载器:
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //获取其上层(不是继承关系，是一种包含关系)：扩展类加载器
        ClassLoader extClassLoader = systemClassLoader.getParent();
        System.out.println(extClassLoader);//sun.misc.Launcher$ExtClassLoader@1b6d3586

        //试图获取扩展类加载器的上层：获取不到引导类加载器
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        System.out.println(bootstrapClassLoader);//null

        //对于用户自定义类来说：（默认使用系统类加载器加载，上层都为扩展类加载器）
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //Java核心类库加载器测试
        //String类使用引导类加载器进行加载的 ---> Java的核心类库都是引导类加载器加载
        ClassLoader classLoader1 = String.class.getClassLoader();
        System.out.println(classLoader1);//null


    }
}
